package io.renren.modules.iots.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;

import io.renren.common.utils.PageUtils;
import io.renren.common.utils.Query;
import io.renren.common.utils.R;
import io.renren.htby.utils.IOTSUtils;
import io.renren.iots.socket.client.SingleSocketWriteThread;
import io.renren.modules.iotp.entity.IOTPBean;
import io.renren.modules.iotp.entity.IOTPBody;
import io.renren.modules.iots.dao.IotsIoserverInfoDao;
import io.renren.modules.iots.entity.IotsIoserverInfoEntity;
import io.renren.modules.iots.service.IotsIoserverInfoService;

@Service("iotsIoserverInfoService")
public class IotsIoserverInfoServiceImpl extends ServiceImpl<IotsIoserverInfoDao, IotsIoserverInfoEntity> implements IotsIoserverInfoService {

	@Override
	public PageUtils queryPage(Map<String, Object> params) {

		String name = (String) params.get("name");

		Page<IotsIoserverInfoEntity> page = this.selectPage(new Query<IotsIoserverInfoEntity>(params).getPage(), new EntityWrapper<IotsIoserverInfoEntity>().like(StringUtils.isNotBlank(name), "name", name));

		return new PageUtils(page);
	}

	@Override
	public List<IotsIoserverInfoEntity> queryIOServerForPid(Long pid) {

		return baseMapper.queryIOServerForPid(pid);
	}

	@Override
	public R syncEqmAndVar(Map<String, String> params) {

		Long id = Long.parseLong(params.get("id"));// ioserver 的 id
		IotsIoserverInfoEntity IoserverEntity = baseMapper.selectById(id);
	
		//同步设备和变量
		SingleSocketWriteThread.sendMsg( IoserverEntity.getIp(), IoserverEntity.getPort(), 	getIOTPBean(IoserverEntity));

		return R.ok().put("msg", "后台正在同步，此操作非实时展示，请勿重复点击。");
	}
	
	/**
	 *  根据 变量的id ，查询 IOServer 的数据 。传入参数为 变量的ids
	 */
	@Override
	public List<IotsIoserverInfoEntity> queryIOServerForVarId(Long[] varIds){
		return baseMapper.queryIOServerForVarId(varIds);
	}

	/**
	 * 21获取 设备 变量 列表信息 22获取 设备 变量 列表返回值  
	 * 
	 * @author lfy.xys
	 * @date 2018年6月21日
	 *
	 * @param list
	 * @return
	 */
	public IOTPBean getIOTPBean(IotsIoserverInfoEntity entity) {
		IOTPBean bean = new IOTPBean();
		bean.setTag(0x1011);// 写死
		bean.setType(21);// 获取设备列表
		bean.setSource_id(10001);//
		bean.setSource_type(IOTSUtils.THIS_SYSTEM_ID);// 设置系统 - 源类型号
		bean.setSequence_id(111);// 拼接包使用的id
		// bean.setSequence_sub_id(0);// 不手动
		// bean.setLicense("");

		IOTPBody body = new IOTPBody();
		body.setSubtype(1);// 是什么消息体

		// 设置协议体
		List<String> bodyList = new ArrayList<String>();
		String json = JSONObject.toJSONString(entity);
		bodyList.add(json);

		body.setBodyList(bodyList);

		bean.setBody(body);
		bean.setEnd(0x1213);

		return bean;
	}


	
}
